#include <cstdio>
int str[150][150];
int main() {
    int n, x, y;
    scanf("%d", &n);
    x = 0;
    y = 0;
    for(int i = 0; i < 4*n + 5; i++) {
        for(int j = 0; j < 4*n + 5; j++) {
            str[i][j] = '.';
        }
    }
    for(int i = 0; i < n + 1; i++) {
        for(int j = y+2; j <= y+4*(n-i)+2; j++) {
            str[x][j] = '$';
        }
        for(int j = x; j <= x+2; j++) {
            str[j][y+2] = '$';
        }
        for(int j = x; j <= x+2; j++) {
            str[j][y+4*(n-i)+2] = '$';
        }
        for(int j = y; j <= y+2; j++) {
            str[x+2][j] = '$';
        }
        for(int j = y+4*(n-i)+2; j <= y+4*(n-i)+4; j++) {
            str[x+2][j] = '$';
        }
        for(int j = x+2; j <= x+4*(n-i)+2; j++) {
            str[j][y] = '$';
        }
        for(int j = x+2; j <= x+4*(n-i)+2; j++) {
            str[j][y+4*(n-i)+4] = '$';
        }
        for(int j = y; j <= y+2; j++) {
            str[x+4*(n-i)+2][j] = '$';
        }
        for(int j = y+4*(n-i)+2; j <= y+4*(n-i)+4; j++) {
            str[x+4*(n-i)+2][j] = '$';
        }
        for(int j = x+4*(n-i)+2; j <= x+4*(n-i)+4; j++) {
            str[j][y+2] = '$';
        }
        for(int j = x+4*(n-i)+2; j <= x+4*(n-i)+4; j++) {
            str[j][y+4*(n-i)+2] = '$';
        }
        for(int j = y+2; j <= y+4*(n-i)+2; j++) {
            str[x+4*(n-i)+4][j] = '$';
        }
        x += 2;
        y += 2;
    }
    for(int i = 0; i < 4*n+5; i++) {
        for(int j = 0; j < 4*n + 5; j++) {
            printf("%c", str[i][j]);
        }
        printf("\n");
    }

    return 0;
}
// 行: 4*n + 5   --> 表示有 n 层嵌套时，需要打印的行数,所以当 n = 30 的时候，需要 125 行
// 列: 4*n + 5   --> 表示有 n 层嵌套时，需要打印的列数,所以当 n = 30 的时候，需要 125 列
